This invention is generally related to communication buses and more particularly to techniques for obtaining device addresses from devices connected to the same set of bus conductors.
Communication buses are widely used in electronic systems to expand the functionality of the system, by allowing multiple devices to communicate with each other and the system through the same bus. The bus allows the flexibility of adding or removing devices to change the capability of the system. Typically, each device has knowledge of its own device address that has been either assigned to it by the system or that was fixed at the time of manufacture of that device. In many cases, it is necessary to routinely identify all devices that are connected to the bus, such as upon system startup, so that the system can update its knowledge of its capabilities.
One way to find out the identity of the devices that are connected to a bus is to probe each possible device address. This may be done by having a requesting device, which is connected to the bus, send a separate request on the bus for each possible device address, and then wait after sending each request for a responding device to respond. The requesting device may do so on its own initiative or in response to a system host that is using the requesting device as a proxy. If no device responds to a request-address combination, then the requestor can conclude that there is no device on the bus at that address. Such a technique, however, can be very time consuming if there are a large number of possible device addresses to go through. Moreover, since each device is connected to the same set of bus conductors (or lines) on which all of the requests are placed, the probing technique may lead to unexpected and potentially damaging side effects because there is an increased chance that a device misunderstands one of the many different requests it receives and responds improperly or unexpectedly.